package com.jiashihui.schema_lgorithm.spring.aspect.proxy;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @author jiashihui
 * @date 2019/03/22
 */
public class ProxyTest {
    public static void main(String[] args) {
        // 创建目标类【目标对象】
        IDivisionService target = new DivisionServiceImpl();
        // 创建代理对象【织入 把切面代码插入到目标对象方法的过程就叫做织入】
        IDivisionService agencyObj = (IDivisionService) ProxyBeanFactory.getAgencyObj(target);
        // 连接点division【指的是可以被切面织入的方法】 // 连接点可以有多大【接口中有多大方法】【连接点属于静态的，当前并未调用】
        // 切入点division【指的是目标对象具体被切面织入的方法，同连接点不同的是，切入点的方法已经被切面织入了，而连接点的方法不一定被切面织入。】
        // // 切入点指的具体调用的方法【切入点属于动态的，当前调用的方法（当前调用的连接点）】
        int consult = agencyObj.division(0, 2);
        System.out.println("两数相除商为--->" + consult);

        System.out.println("############################我是分隔符########################################");

        ApplicationContext ac = new ClassPathXmlApplicationContext("spring/spring-bean.xml");
        // IDivisionService bean = (IDivisionService)ac.getBean("proxyFactoryBean");
        IDivisionService bean = (IDivisionService) ac.getBean("calculatorServiceTarget");
        int division = bean.division(10, 0);
        System.out.println("两数相除商为：" + division);
        int add = bean.add(0, 2);
        System.out.println("两数相加商为：" + add);

        IComparatorService bean1 = (IComparatorService) ac.getBean("comparatorServiceTarget");
        bean1.comparator(0, 1);
    }
}
